/**
 * DCL懒汉式单例（双重检测）
 */
public class SingletonDemo03 {
    //私有构造方法
    private SingletonDemo03() {
    }

    //定义一个对象,类初始化时，不立即加载该对象
    private static volatile SingletonDemo03 instance;

    //获取对象
    public static SingletonDemo03 getInstance() {
        if (instance == null) {
            //第一次实例化时 进行synchronized，下次再使用时直接获取已创建好的对象
            synchronized (SingletonDemo03.class) {
                if (instance == null) {
                    instance = new SingletonDemo03();
                }
            }
        }
        return instance;

    }

}

class SingleTonTest03 {
    public static void main(String[] args) {
        SingletonDemo03 instance01 = SingletonDemo03.getInstance();
        SingletonDemo03 instance02 = SingletonDemo03.getInstance();
        System.out.println(instance01 == instance02);  //返回true,代表同一个对象
    }
}
